/*
 * @Author: jiangxin
 * @Date: 2022-11-13 15:39:18
 * @Company: orientsec.com.cn
 * @Description:
 */
const fs = require("fs-extra");
const path = require("path");


const configPath = path.resolve(__dirname, "..", "config");

/**
 * 判断是否dev环境
 * @param {} e
 * @returns
 */
const isDev = (e) => {
  return (e + "").toLowerCase() === "dev".toLowerCase();
};
/**
 * 判断是否prod环境
 * @param {*} e
 * @returns
 */
const isProd = (e) => {
  return (e + "").toLowerCase() === "prod".toLowerCase();
};

/**
 * 获取开发环境配置文件
 * @param {*} e  用来标识是dev/prod
 * @param {*} action  用来标识是serve/build
 * @returns
 */
const getDevConfig = (e, action) => {
    console.time()
  // REACT_ENV用来说明调用个服务
  // 可通过REACT_ENV 来直接指定开发环境(mock,dev,sit,uat)，默认通过e入参来获取相应的配置文件
  const serverenv = process.env.SERVICE_ENV ?? "mock";
  const devconfig = {};

  // 生产环境，直接获取生产环境的配置即可
  if (isProd(e)) {
    const filepath = path.resolve(__dirname, "..", "config", "config.prod.js");
    devconfig.prod = require(filepath);
    return devconfig;
  }

  // 开发环境启动服务  非build
  if (isDev(e) && action === "serve") {
    const filepath = path.resolve(
      __dirname,
      "..",
      "config",
      `config.${serverenv}.js`
    );
    const isExist = fs.pathExistsSync(filepath);
    if (!isExist) {
      console.error(`不存在${serverenv}环境的配置文件`);
      process.exit(1);
    }
    devconfig[serverenv] = require(filepath);
    return devconfig;
  }
  // 开发环境启动服务  build  【需要排除mock,prod环境】给测试人员用的

  fs.readdirSync(configPath)
    .filter((file) => {
      if (isDev(e) && action === "build") {
        const [, env] = file.split(".");
        return env !== "mock" && env !== "prod";
      }
      return true;
    })
    .forEach((config) => {
      console.log("config", config);
      const filepath = path.resolve(__dirname, "..", "config", config);

      const isExist = fs.pathExistsSync(filepath);
      if (!isExist) {
        console.error(`不存在${serverenv}环境的配置文件`);
        process.exit(1);
      }
      const [, env] = config.split(".");

      if (fs.pathExistsSync(filepath)) {
        const content = require(filepath);
        devconfig[env] = content;
      }
    });
    console.timeEnd()
  return devconfig;
};

module.exports = {
  getDevConfig
};

